/**
 * @param {number} k
 * @param {number} n
 * @return {number[][]}
 */
 var combinationSum3 = function(k, n) {
    // 三部曲 结果数组 res  path
    // 参数 个数k,总和n 起始的位置 还有这个和
    // 退出逻辑 当这个的和是n的时候 要加入结果数组 如果个数是k但是和不是n 就直接退出 进入回溯
    // 单层逻辑 从其实位置来时遍历 到这个n的大小 
    // 求得之前的和和这一个的总和 
    // 递归调用 然后回溯退出这个总和
    let path = []
    let res = []
    const backTracking = function(k,n,sum,startIndex){
      if(path.length === k && sum === n){
        res.push([...path])
        return
      }
      if(path.length === k){
        return
      }
      for(let i = startIndex;i <= 9;i++){
        path.push(i),
        sum += i
        backTracking(k,n,sum,i+1)
        path.pop()
        sum = sum - i
      }
    }
    backTracking(k,n,n,1)
    return res
};